[Elastic Beanstalk] eb環境のSecurityGroup(ELB,EC2)を設定してみた
はじめに
AWSチームの鈴木です。
パブリックな「webserver」として起動したElasticBeanstalk環境、 そのELBで利用されるSecurityGroupは、HTTP(HTTPS)がAny(0.0.0.0/0)で公開されます。
また、eb環境作成時にSSH接続用のキーペアを指定した場合、SSH用のTCP22ポートはAny公開されます。
特定のグローバルIP範囲のみに限定公開するWebサーバの設置や、 セキュリティ対策としてSSHの接続元IPを制限する必要がある場合、 ElasticBeanstalkの環境リソースとして、SecurityGroupを設定する方法について紹介します。
検証環境
ebクライアント(ebcli)
$ eb --version EB CLI 3.5.4 (Python 2.7.9)
eb プラットフォーム
$ eb status | grep Platform Platform: 64bit Amazon Linux 2015.03 v2.0.1 running PHP 5.4
検証用eb構築手順
サンプルPHP環境設置
mkdir HelloWorld cd HelloWorld eb init -p PHP echo "Hello World" > index.html
ebextensions設置
ELB設定
- 特定IP(192.168.0.1/32 ※仮)のHTTP(TCP:80)を許可
EC2設定
- デフォルトVPC(172.31.0.0/16)からのHTTP(TCP:80)接続を許可(ELB接続用)
- デフォルトVPCからのSSH(TCP:22)を許可(踏台EC2想定)
設置例
mkdir -p .ebextensions/ cat << EoF > .ebextensions/00.sg.config Resources: AWSEBLoadBalancerSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: My ELB SecurityGroup settings for eb environment. SecurityGroupIngress: - {CidrIp: "192.168.0.1/32", IpProtocol: "tcp", FromPort: "80", ToPort: "80"} AWSEBSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: My EC2 SecurityGroup settings for eb environment. SecurityGroupIngress: - {CidrIp: "172.31.0.0/16", IpProtocol: "tcp", FromPort: "80", ToPort: "80"} option_settings: - namespace: aws:autoscaling:launchconfiguration option_name: SSHSourceRestriction value: tcp, 22, 22, 172.31.0.0/16 EoF
検証用eb環境作成
eb create dev-env --scale 1 eb open
設定確認
ELB用 SecurityGroup
EC2用 SecurityGroup
まとめ
接続元が固定のグローバルIPアドレスを有す場合、接続元IPを制限する事はセキュリティ対策として一定の効果が期待できます。
今回紹介したようにeb環境ではSecurityGroupの設定も簡単に実施する事が可能ですので、ぜひお試しください。